import axios, { type AxiosResponse } from "axios";
import useLonginStore from "@/store/modules/user";
import pinia from "@/store/index";

// 响应拦截器需要用到的参数
interface ResponseData<T> {
  code: number;
  data: T;
  message: string;
}

// 配置新建一个 axios 实例
const service = axios.create({
  // 新的 axios 实例对象的请求基础url
  // import.meta.env.VITE_API_URL => 读取项目环境变量配置文件（.env.development，.env.production）中的内容，如果我们系统中没有配置环境变量信息，则默认是 development
  baseURL: import.meta.env.VITE_API_URL,
  // 请求超时设置
  timeout: 50000,
});

// 添加请求拦截器
// 请求拦截器是在每次请求发出之前执行，
service.interceptors.request.use((config: any) => {
  // 对发送的数据进行修正的
  // 可以把请求的 token 放在这里进行处理
  config.headers = {
    token: useLonginStore(pinia).token,
  };
  return config;
});

//响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse<ResponseData<any>>) => {
    //请求成功了,也不一定是我们想要的数据,后端返回的数据的code是200的时候才是我们想要的数据
    if (response.data.code === 200) {
      //直接把我们需要的数据返回即可
      return response.data.data;
    } else {
      return Promise.reject(response.data);
    }
  },
  (error) => {
    return Promise.reject(error); //返回一个失败的promise
  }
);
export default service;
